package com.ruoyi.quality.service.impl;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.ruoyi.common.core.exception.GlobalException;
import com.ruoyi.common.core.utils.sql.QueryHelp;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.quality.domain.*;
import com.ruoyi.quality.domain.InspectionTemplateItemMaterial;
import com.ruoyi.quality.domain.dto.InspectionTemplateItemMaterialDto;
import com.ruoyi.quality.domain.vo.InspectionTemplateItemMaterialVo;
import com.ruoyi.quality.domain.vo.InspectionTemplateItemMaterialVo;
import com.ruoyi.quality.mapper.InspectionTemplateItemMaterialMapper;
import com.ruoyi.quality.service.InspectionTemplateItemMaterialService;
import com.ruoyi.quality.mapper.InspectionTemplateItemMaterialMapper;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

/**
 *
 */
@Service
public class InspectionTemplateItemMaterialServiceImpl implements InspectionTemplateItemMaterialService{

    @Resource
    InspectionTemplateItemMaterialMapper inspectionTemplateItemMaterialMapper;
    @Override
    public Page<InspectionTemplateItemMaterialVo> getInspectionTemplateItemMaterialByPage(InspectionTemplateItemMaterialDto pageEntity) {
        MPJLambdaWrapper<InspectionTemplateItemMaterial> wrapper = new MPJLambdaWrapper<InspectionTemplateItemMaterial>()
                .selectAll(InspectionTemplateItemMaterial.class)//查询user表全部字段
                //记的测试阶段
                .selectAs(InspectionItem::getName, InspectionTemplateItemMaterialVo::getInspectionItemName)
                .selectAs(InspectionItem::getStandardToleranceOne, InspectionTemplateItemMaterialVo::getStandardToleranceOne)
                .selectAs(InspectionItem::getStandardToleranceTwo, InspectionTemplateItemMaterialVo::getStandardToleranceTwo)
                .selectAs(InspectionItem::getFailurePattern, InspectionTemplateItemMaterialVo::getFailurePattern)
                .leftJoin(InspectionItem.class, InspectionItem::getId,InspectionTemplateItemMaterial::getInspectionItemId )
                .eq(InspectionTemplateItemMaterial::getDelFlag, 0)
                .eq(InspectionTemplateItemMaterial::getMaterialCode,pageEntity.getMaterialCode())
                .orderByDesc(InspectionTemplateItemMaterial::getCreateTime);
        wrapper = QueryHelp.getPredicateEx(wrapper, InspectionTemplateItemMaterial.class, pageEntity);
        Page<InspectionTemplateItemMaterialVo> userList = inspectionTemplateItemMaterialMapper.selectJoinPage(new Page<>(pageEntity.getCurrentPage(), pageEntity.getPageSize()),   InspectionTemplateItemMaterialVo.class, wrapper);
        return userList;
    }

    @Override
    public void updateInspectionTemplateItemMaterials(List<InspectionTemplateItemMaterialDto> inspectionTemplateItemMaterialDtos) {
        String userName = SecurityUtils.getUsername();
        List<Long> ids = inspectionTemplateItemMaterialDtos.stream().map(item -> item.getId()).distinct().collect(Collectors.toList());
        MPJLambdaWrapper<InspectionTemplateItemMaterial> wrapper = new MPJLambdaWrapper<InspectionTemplateItemMaterial>()
                .in(InspectionTemplateItemMaterial::getId, ids)
                .ne(Sampling::getDelFlag, 1);
        List<InspectionTemplateItemMaterial> inspectionTemplateItemMaterials = inspectionTemplateItemMaterialMapper.selectList(wrapper);
        if(null == inspectionTemplateItemMaterials || inspectionTemplateItemMaterials.size() <= 0) {
            throw new GlobalException("物料公差数据ID不存在");
        }

        for(InspectionTemplateItemMaterialDto inspectionTemplateItemMaterialDto : inspectionTemplateItemMaterialDtos) {
            Optional<InspectionTemplateItemMaterial> optionalInspectionTemplateItemMaterial =
                    inspectionTemplateItemMaterials.stream().filter(item -> item.getId().equals(inspectionTemplateItemMaterialDto.getId())).findFirst();
            if(optionalInspectionTemplateItemMaterial.isPresent()) {
                InspectionTemplateItemMaterial inspectionTemplateItemMaterial = optionalInspectionTemplateItemMaterial.get();
                inspectionTemplateItemMaterial.setLowerToleranceOne(inspectionTemplateItemMaterialDto.getLowerToleranceOne());
                inspectionTemplateItemMaterial.setUpperToleranceOne(inspectionTemplateItemMaterialDto.getUpperToleranceOne());
                inspectionTemplateItemMaterial.setToleranceOneDesc(inspectionTemplateItemMaterialDto.getToleranceOneDesc());
                inspectionTemplateItemMaterial.setLowerToleranceTwo(inspectionTemplateItemMaterialDto.getLowerToleranceTwo());
                inspectionTemplateItemMaterial.setUpperToleranceTwo(inspectionTemplateItemMaterialDto.getUpperToleranceTwo());
                inspectionTemplateItemMaterial.setToleranceTwoDesc(inspectionTemplateItemMaterialDto.getToleranceTwoDesc());
                inspectionTemplateItemMaterial.setUpdateBy(userName);
                inspectionTemplateItemMaterial.setUpdateTime(new Date());
                inspectionTemplateItemMaterialMapper.updateById(inspectionTemplateItemMaterial);
            }
        }
    }
}




